package captcha

import (
	"errors"

	"github.com/go-redis/redis"
)

var redisdb *redis.Client

// Init init redis server
func Init(r *redis.Client) error {
	redisdb = r
	res, e := redisdb.Do("ping").String()
	if e != nil {
		return errors.New("captcha: redis: " + e.Error())
	}
	if res != "PONG" {
		return errors.New("captcha: redis no response")
	}
	return nil
}

func set(idKey string) error {
	_, e := redisdb.Do("select", "0").String()
	if e != nil {
		return e
	}
	_, e = redisdb.Do("set", idKey, "Exist").String()
	if e != nil {
		return e
	}
	intr, e := redisdb.Do("expire", idKey, "60").Int64()
	if e != nil {
		return e
	}
	if intr != 1 {
		return errors.New("redis in captcha: Err expected result 1")
	}

	return nil
}

func get(idKey string) (bool, error) {
	_, e := redisdb.Do("select", "0").String()
	if e != nil {
		return false, e
	}
	r, e := redisdb.Do("get", idKey).String()
	if e != nil && e.Error() == "redis: nil" {
		return false, nil
	} else if e != nil {
		return false, e
	}

	if r == "Exist" {
		return true, nil
	}
	return false, nil
}

func del(idKey string) error {
	_, e := redisdb.Do("select", "0").String()
	if e != nil {
		return e
	}
	_, e = redisdb.Do("del", idKey).Int64()
	if e != nil {
		return e
	}
	return nil
}
